package com.rpcservice.rpc.loadBalance;

import com.rpcservice.rpc.remoting.dto.RpcRequest;

import java.util.List;

/**
 * 负载均衡接口
 * 体现了负载均衡的算法策略
 * 负载均衡是指在多台机器/节点间分配任务或请求的过程，确保每个节点的负载相对均衡，避免某一节点过载。
 * 常见算法：
 * 轮询（Round Robin）：请求按照顺序依次分配给每个节点。
 * 加权轮询（Weighted Round Robin）：根据节点的能力（如处理能力、带宽）给节点加权，较强的节点处理更多请求。
 * 最少连接（Least Connections）：请求分配给当前连接数最少的节点。
 * 源地址哈希（Source IP Hash）：根据请求源IP的哈希值来选择节点，
 * 形象解释：
 * 想象你是餐厅的服务员（负载均衡器），有多个桌子（服务器）。每当有顾客进来，你需要把他们分配到空桌子上，
 * 轮流分配是最简单的，但如果某些桌子特别大，可以处理更多顾客，你就需要按桌子的大小（能力）分配顾客。
 */
public interface LoadBalance {

    /**
     * 从存在的服务地址列表中选择一个服务地址
     *
     * @param serviceUrlList
     * @param rpcRequest
     * @return
     */
    String selectServiceAddress(List<String> serviceUrlList, RpcRequest rpcRequest);
}
